package com.doublethread.easymart.modules.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.doublethread.easymart.common.result.PageResult;
import com.doublethread.easymart.modules.order.dto.*;
import com.doublethread.easymart.modules.order.entity.Order;
import com.doublethread.easymart.modules.order.vo.OrderStatisticsVO;
import com.doublethread.easymart.modules.order.vo.OrderVO;

import java.time.LocalDate;

/**
 * 订单服务接口
 */
public interface OrderService extends IService<Order> {

    /**
     * 创建订单
     */
    OrderVO createOrder(Long userId, OrderCreateDTO orderCreateDTO);

    /**
     * 获取用户订单列表
     */
    PageResult<OrderVO> getUserOrderList(Long userId, OrderQueryDTO queryDTO);

    /**
     * 获取订单详情
     */
    OrderVO getOrderById(Long userId, Long orderId);

    /**
     * 取消订单
     */
    void cancelOrder(Long userId, Long orderId, OrderCancelDTO cancelDTO);

    /**
     * 确认收货
     */
    void confirmReceive(Long userId, Long orderId);

    /**
     * 支付订单
     */
    void payOrder(Long userId, Long orderId);

    /**
     * 获取订单列表
     */
    PageResult<OrderVO> getAdminOrderList(OrderQueryDTO queryDTO);

    /**
     * 获取订单详情
     */
    OrderVO getAdminOrderById(Long orderId);

    /**
     * 发货
     */
    void deliverOrder(Long orderId, OrderDeliveryDTO deliveryDTO);

    /**
     * 取消订单
     */
    void adminCancelOrder(Long orderId, OrderCancelDTO cancelDTO);

    /**
     * 更新订单备注
     */
    void updateOrderRemark(Long orderId, OrderRemarkDTO remarkDTO);

    /**
     * 更新订单状态
     */
    void updateOrderStatus(Long orderId, OrderUpdateStatusDTO statusDTO);

    /**
     * 获取订单统计信息
     */
    OrderStatisticsVO getOrderStatistics(LocalDate startDate, LocalDate endDate);

    /**
     * 处理过期订单
     */
    void handleExpiredOrders();

    /**
     * 自动确认收货
     */
    void autoConfirmReceive();
}
